const Common = require('./common')
const AdminModel = require('../model/admin')
const Constnat = require('../constant/constant')
const dateFormat = require('dateformat')
const Token = require('./Token')
const wishModel = require('../model/wish')
const TOKEN_EXPIRE_SENCOND = 3600
let exportObj = {
    login,
    checkusername,
    register,
    getwishdata,
    setwishdata
}
module.exports = exportObj
function login(req, res) {
    const resObj = Common.clone(Constnat.DEFAULT_SUCCESS);
    console.log(req.body);
    let tasks = {
        checkParams: (cb) => {
            Common.checkParams(req.body, ['username', 'password'], cb)
        },
        //查询方法
        query: ['checkParams', (results, cb) => {
            AdminModel.findOne({
                where: {
                    username: req.body.username,
                    password: req.body.password
                }
            }).then(function (result) {
                //查询结果处理
                if(result){
                    //查询到结果
                    resObj.data = {
                        id:result.id,
                        username:result.username,
                        name:result.name,
                        role:result.role,
                        lastLoginAt:dateFormat(result.lastLoginAt,'yyyy-mm-dd HH:MM:ss'),
                        createdAt:dateFormat(result.createdAt,'yyyy-mm-dd HH:MM:ss'),
                    };
                    //将admin的id保存在token中
                    const adminInfo = {
                        id:result.id
                    };
                    //生成token
                    let token = Token.encrypt(adminInfo,TOKEN_EXPIRE_SENCOND)
                    console.log(token);
                    resObj.data.token = token;
                    cb(null,result.id);
                }else{
                    //没有查询到结果
                    cb(Constnat.LOGIN_ERROR);
                }
            }).catch(function (err) {
                console.log(err);
                cb(Constnat.DEFAULT_ERROR)
            })
        }],
        //写入登录日期
        writeLastLoginAt:['query',(results,cb)=>{
            let adminId = results['query'];
            AdminModel.update({
                lastLoginAt:new Date()
            },{
                where:{
                    id:adminId
                }
            }).then(function (result){
                if(result){
                    cb(null)
                }else{
                    cb(Constnat.DEFAULT_ERROR)
                }
            }).catch(function(err){
                console.log(err);
                cb(Constnat.DEFAULT_ERROR);
            })
        }]
    };
    Common.autoFn(tasks,res,resObj)
}
function register(req,res){
    console.log(req.body);
    const resObj = Common.clone(Constnat.DEFAULT_SUCCESS);
    let tasks = {
        checkParams:(cb)=>{
            Common.checkParams(req.body,['username','name','password'],cb)
        },
        query: ['checkParams', (results, cb) => {
            AdminModel.create({
                    username: req.body.username,
                    name:req.body.name,
                    password:req.body.password,
                    role:2,
                    createdAt:new Date,
                    updatedAt:new Date
            }).then(function (result) {
                //查询到结果
                cb(null)
            }).catch(function (err) {
                console.log(err);
                cb(Constnat.DEFAULT_ERROR)
            })
        }],
    }
    console.log(resObj);
    Common.autoFn(tasks,res,resObj)
}
function checkusername(req,res){
    console.log(req.body);
    const resObj = Common.clone(Constnat.DEFAULT_SUCCESS);
    let tasks = {
        checkParams:(cb)=>{
            Common.checkParams(req.body,['username'],cb)
        },
        query: ['checkParams', (results, cb) => {
            AdminModel.findOne({
                where: {
                    username: req.body.username,
                }
            }).then(function (result) {
                //查询结果处理
                if(result){
                    resObj.data = {id:1};
                }else{
                    resObj.data = {id:0};
                }
                //查询到结果
                cb(null)
            }).catch(function (err) {
                console.log(err);
                cb(Constnat.DEFAULT_ERROR)
            })
        }],
    }
    console.log(resObj);
    Common.autoFn(tasks,res,resObj)
}
module.exports = exportObj
function getwishdata(req, res) {
    const resObj = Common.clone(Constnat.DEFAULT_SUCCESS)
    // 定义一个async任务
    let tasks = {
        // 执行查询方法
        query: cb => {
            // 使用Sequelize的model的findAll方法查询
            wishModel
                .findAll({
                    limit: 20,
                    order: [['created_at', 'DESC']],
                })
                .then(function (result) {
                    // 查询结果处理

                    // 定义一个空数组list，用来存放最终结果
                    let list = [];
                    // 遍历SQL查询出来的结果，处理装入list
                    result.forEach((v, i) => {
                        let obj = {
                            id: v.id,
                            name: v.name,
                            content: v.content,
                            createdAt: dateFormat(v.createdAt, 'yyyy-mm-dd HH:MM:ss')
                        };
                        list.push(obj);
                    });
                    resObj.data = {
                        list
                    }
                    // 通过async提供的回调，返回数据到下一个async方法
                    cb(null);
                })
                .catch(function (err) {
                    // 错误处理

                    // 打印错误日志
                    console.log(err);
                    // 通过async提供的回调，返回数据到下一个async方法
                    cb(Constnat.DEFAULT_ERROR);
                });
        }
    }
    Common.autoFn(tasks, res, resObj)
}

function setwishdata(req, res) {
    console.log(req.query);
    const resObj = Common.clone(Constnat.DEFAULT_SUCCESS)
    let tasks = {
        // 验证必填参数方法
        checkParams: cb => {
            Common.checkParams(req.query, ['name', 'content'], cb)
        },
        // 执行添加方法
        add: ['checkParams', (results, cb) => {
            // 使用Sequelize的model的create方法插入
            wishModel
                .create({
                    name: req.query.name,
                    content: req.query.content
                })
                .then(function (result) {
                    // 插入结果成功处理
                    cb(null);
                })
                .catch(function (err) {
                    // 错误处理
                    // 打印错误日志
                    console.log(err);
                    // 通过async提供的回调，返回数据到下一个async方法
                    cb(Constnat.DEFAULT_ERROR);
                });
        }]
    };
    Common.autoFn(tasks, res, resObj)

}